package com.zjdiepu.www.base.core;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.zjdiepu.www.base.enums.type.DataType;
import com.zjdiepu.www.common.consts.SystemConsts;
import com.zjdiepu.www.common.util.CollectionInitUtil;

/**   
 * 所属公司：稻普控股集团
 * 项目名称：dpqc-parent-manager-base   
 * 类名称：BaseService   
 * 类描述：   
 * 创建人：zhangpp
 * 创建时间：2017年3月24日 下午12:55:24   
 * 修改人：zhangpp
 * 修改时间：2017年3月24日 下午12:55:24   
 * 修改备注：   
 * @version V1.0     
 */
@Service
public abstract class BaseService {
	
	protected static final Logger logger = LoggerFactory.getLogger(BaseService.class);
	
	/**
	 * @author xiongxiaotun <br/>
	 * @Title: isSuperRole  <br/>
	 * @Description: 判断是否为超级管理员公司、部门、用户、角色 <br/>
	 * @param currentUser
	 * @return
	 * @version V1.0  <br/>
	 */
	public boolean isSuper(String id){
		if(StringUtils.isBlank(id)) {
			return false;
		}
		return SystemConsts.SUPER_ADMIN_ID.equals(id);
	}
	
	/**
	 * @author xiongxiaotun <br/>
	 * @Title: getEmptyParamMap  <br/>
	 * @Description: 创建空map <br/>
	 * @return
	 * @version V1.0  <br/>
	 */
	protected Map<String, String> getEmptyParamMap() {
		return CollectionInitUtil.emptyMap();
	}
	
	/**
	 * @author xiongxiaotun
	 * @Title: getAliHeadMap 
	 * @Description: 获取阿里通用请求头
	 * @return
	 * @return Map<String,String>    返回类型 
	 * @version V1.0
	 * @throws
	 */
	protected Map<String, String> getAliCommonHeaderMap(String aliAppCode){
		Map<String, String> headerMap = new HashMap<String, String>();
		headerMap.put("Authorization", "APPCODE " + aliAppCode);
		return headerMap;
	}
	
	/**
	 * @author xiongxiaotun
	 * @Title: getJuheCommonParamMap 
	 * @Description: 获取聚合数据通用请求参数
	 * @return
	 * @return Map<String,String>    返回类型 
	 * @version V1.0
	 * @throws
	 */
	protected Map<String, String> getJuheCommonParamMap(String juheAppkey){
		HashMap<String, String> paramMap = new HashMap<String, String>();
		paramMap.put("dtype", DataType.JSON.getCode());
		paramMap.put("key", juheAppkey);
		return paramMap;
	}
	
	/**
	 * @author xiongxiaotun <br/>
	 * @Title: checkJuheResponse  <br/>
	 * @Description: 检查响应是否异常  <br/>
	 * @param jsonObject
	 * @param logger
	 * @version V1.0  <br/>
	 */
	protected void checkJuheResponse(JSONObject jsonObject, Logger logger){
		
		if(null == jsonObject){
			
			return;
		}
		String returnCode = jsonObject.getString("error_code");
		if(!SystemConsts.RETURN_SUCCESS_CODE.equals(returnCode)) {
			
			if(null != logger) {
				
				logger.error("invoke third service return error. errorCode is {}, errorMsg is {}.", returnCode, jsonObject.getString("reason"));
			}
			throw new BaseException(returnCode, jsonObject.getString("reason"));
		}
	}
	
	/**
	 * 处理聚合市场接口的结果
	 * @author xiongxiaotun@126.com
	 * @time 2017年3月22日 下午9:25:22
	 * @since 1.0.0
	 * @update
	 * @param jsonString
	 * @param clazz
	 * @return
	 */
	protected <T> List<T> commonProcessJsonResultFromJuhe(String jsonString, Class<T> clazz){
		if(StringUtils.isEmpty(jsonString)) {
			return new ArrayList<T>();
		}
		JSONObject jsonObject = (JSONObject) JSONObject.parse(jsonString);
		String returnCode = jsonObject.getString("error_code");
		if(!SystemConsts.RETURN_SUCCESS_CODE.equals(returnCode)) {
			logger.error("invoke third service return error. errorCode is {}, errorMsg is {}.", returnCode, jsonObject.getString("reason"));
			return new ArrayList<T>();
		} 
		JSONArray jsonArray = jsonObject.getJSONArray("result");
		List<T> items = jsonArray.toJavaList(clazz);
		return items;
	}
	
	/**
	 * 处理阿里云市场接口的结果
	 * @author xiongxiaotun@126.com
	 * @time 2017年3月22日 下午9:25:22
	 * @since 1.0.0
	 * @update
	 * @param jsonString
	 * @param clazz
	 * @return
	 */
	protected <T> List<T> commonProcessJsonResultFromAli(String jsonString, Class<T> clazz){
		if(StringUtils.isEmpty(jsonString)) {
			return new ArrayList<T>();
		}
		JSONObject jsonObject = (JSONObject) JSONObject.parse(jsonString);
		String returnCode = jsonObject.getString("status");
		if(!SystemConsts.RETURN_SUCCESS_CODE.equals(returnCode)) {
			logger.error("invoke third service return error. errorCode is {}, errorMsg is {}.", returnCode, jsonObject.getString("msg"));
			return new ArrayList<T>();
		} 
		JSONArray jsonArray = jsonObject.getJSONArray("result");
		List<T> items = jsonArray.toJavaList(clazz);
		return items;
	}
}
